/*
即使用了while循环依次读取数据流，但还是一个字节一个字节的读，效率太低。能否一次性全部读取呢
答案是可以的，我们可以预置一个容量合理的数组来存放
 */
package javaio.FileInputOutputStream;

import java.io.FileInputStream;
import java.io.IOException;

public class Main5 {
    public static void main(String[] args) {
        try (FileInputStream inputStream = new FileInputStream("test.txt")) {
            byte[] bytes = new byte[inputStream.available()]; //创建一个inputStream流字节大小的字节数组
            System.out.println(inputStream.read(bytes));//一次性读取全部字节，返回的是读取的字节数，返回5
            /*
            inputStream有多个read方法
            .read()直接返回读取字节的ascii码值(int)，方便转成char，前面用的都是这个.read()
            .read(byte[] b) 返回读取了多少个字节，()里的byte[]数组表示的是要往这个数组里面存储的字节流
             */
            System.out.println(new String(bytes)); //通过String(byte[])构造方法，把byte[]构造成字符串
            /*
            String()有很多种构造方法，除了String(byte[]),还有String(Buffer)，String(Builder),String(char[])
            通过打印可以看到，使用String(byte[])方法构造的字符串，中文能正确显示，比直接用char转换中文显示乱码好

             */
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
/*
test.txt 内容为ab中，为什么自己数显示5，“中”字在UTF-8占3个字节么？
 */
